/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.util.ArrayList;
import modelo.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojos.Articulos;

/**
 *
 * @author dam2A
 */
public class ArticulosDAO {
    private Session sesion; 
    private Transaction ts;
    /**
     * Inicia los recursos necesarios para hacer operaciones en hibernate
     */
    private void inicia(){
        sesion = HibernateUtil.getSessionFactory().openSession();
        ts = sesion.beginTransaction();
    }
    
    public void addArticulo(Articulos a){
        int id;
        inicia();
        try{
            id = (int) sesion.save(a);
            ts.commit();
        }catch(HibernateException e){
            throw e;
        }
    }
    
    public ArrayList getArticulos(){
        ArrayList<Articulos> alArticulos = null;
        try{
            inicia();
            alArticulos = (ArrayList<Articulos>) sesion.createQuery("from Articulos").list();
        }catch(HibernateException e){
            System.out.println("Error hibernate al cojer articulos: "+e);
        }finally{
            sesion.close();
        }
        return alArticulos;
    }
    
    public void borrarArticulo(int idArticulo){
        int aux;
        Articulos articulo;
        try{
            inicia();
            articulo = (Articulos) sesion.get(Articulos.class, idArticulo);
            sesion.delete(articulo);
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error de hibernate al intentar borrar un articulo: "+e);
        }finally{
            sesion.close();
        }     
    }
    
    public ArrayList buscarPorIDA(String idArticulo){
        ArrayList<Articulos> alArticulos = null;
        int aux;
        try{
            inicia();
            alArticulos = (ArrayList<Articulos>) sesion.createQuery("from Articulos where idArticulo ="+idArticulo).list();
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al buscar por id de articulo: "+e);
        }finally{
            sesion.close();
        }
        return alArticulos;
    }
    
    public ArrayList buscarPorIDAlm(String idAlmacen){
        ArrayList<Articulos> alArticulos = null;
        int aux;
        try{
            inicia();
            alArticulos = (ArrayList<Articulos>) sesion.createQuery("from Articulos where almacen.idAlmacen ="+idAlmacen).list();
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al buscar por id de almacen: "+e);
        }finally{
            sesion.close();
        }
        return alArticulos;
    }
    public ArrayList buscarPorDesc(String descr){
        ArrayList<Articulos> alArticulos = null;
        int aux;
        try{
            inicia();
            alArticulos = (ArrayList<Articulos>) sesion.createQuery("from Articulos where descripcion LIKE '"+descr+"%'").list();
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al buscar por descripcion: "+e);
        }finally{
            sesion.close();
        }
        return alArticulos;
    }
    public ArrayList buscarPorCant(String cant){
        ArrayList<Articulos> alArticulos = null;
        int aux;
        try{
            inicia();
            alArticulos = (ArrayList<Articulos>) sesion.createQuery("from Articulos where cantidad <="+cant).list();
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al buscar por descripcion: "+e);
        }finally{
            sesion.close();
        }
        return alArticulos;
    }
    public ArrayList buscarPorPrecio(String precio){
        ArrayList<Articulos> alArticulos = null;
        int aux;
        try{
            inicia();
            alArticulos = (ArrayList<Articulos>) sesion.createQuery("from Articulos where precio ="+precio).list();
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al buscar por precio: "+e);
        }finally{
            sesion.close();
        }
        return alArticulos;
    }
    public Articulos getArticulo(int id){
        Articulos a = null;
        try{
            inicia();
            a = (Articulos) sesion.get(Articulos.class, id);
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al buscar un articulo: "+e);
        }finally{
            sesion.close();
        }
        return a;
    }
    
    public void updateArticulo(Articulos a){
        try{
            inicia();
            sesion.update(a);
            ts.commit();
        }catch(HibernateException e){
            System.out.println("Error al actualizar el articulo: "+e);
        }finally{
            sesion.close();
        }
    }
}
